//Multi-Jump by 742mph and BlueBlurForever
//Customizable variables:
//player.jumpsnum: Number of multi-jumps the player can perform, including the first one
//player.delaytime: Time window in tics for the player to jump upon hitting the ground
//player.mustberunning: If true, player must be above their runspeed in order to multi-jump
//player.defaultfactor: The player character's default jumpfactor
//player.increasefactor: The amount the jumpfactor increases by for each multi-jump

addHook("ThinkFrame", do
	for player in players.iterate
		if (player.mo.skin == "lepori") then
			//You can set these variables to whatever
			player.jumpsnum = 5
			player.delaytime = 5
			player.mustberunning = true
			//Set this to your character's normal jumpfactor
			player.defaultfactor = FRACUNIT
			player.increasefactor = FRACUNIT/4
			//Changing variables
			if (player.currentjump == nil) then
				player.currentjump = 0
			end
			if (player.multijumptimer == nil) then
				player.multijumptimer = 0
			end
			if (player.wasjustjumping == nil) then
				player.wasjustjumping = false
			end
			//Has the player just touched the floor?
			if not (player.pflags & PF_NIGHTSMODE)
			and not (player.mo.state == S_PLAY_PAIN)
			and not (player.pflags & PF_MACESPIN)
			and not (player.pflags & PF_STASIS)
			and not (player.mo.tracer and player.mo.tracer.type == MT_TUBEWAYPOINT)
			and (player.mo.eflags & MFE_JUSTHITFLOOR)
			and (player.wasjustjumping == true) then
				if (player.mustberunning == false)
				or (player.panim == PA_RUN) then
					//Set the multi-jump timer
					player.multijumptimer = player.delaytime + 1
					if player.currentjump < (player.jumpsnum - 1) then
						player.currentjump = $1 + 1
					else
						player.currentjump = (player.jumpsnum - 1)
					end
				end
			end
			//Decrease multi-jump timer over time except when jumping
			if not (player.pflags & PF_JUMPED)
			and (player.multijumptimer > 0) then
				player.multijumptimer = $1 - 1
			end
			//Change jump factor and spawn ghost mobj if multijump is active
			if (player.multijumptimer > 0) then
				if (player.pflags & PF_JUMPED) then
					player.multijumptimer = player.delaytime
				end
				player.jumpfactor = player.defaultfactor + (player.increasefactor*player.currentjump)
			else
				player.currentjump = 0
				player.jumpfactor = player.defaultfactor
			end
			//Was the player just jumping?
			if (player.pflags & PF_JUMPED) then
				player.wasjustjumping = true
			else
				player.wasjustjumping = false
			end
		end
	end
end)
